package com.qipay.utils;

import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;
import java.util.Set;

public class CommonUtil {
    /**
     * 判断对象内容是否为空
     * 对象等于null 为空
     * 对象类型支持 数组、字符串、
     *
     * @param obj
     * @return
     */
    public static boolean isEmpty(Object obj) {
        if (obj == null) {
            return true;
        }
        if (obj.getClass().isArray()) {
            return Array.getLength(obj) == 0;
        } else if (obj instanceof String) {
            return ((String) obj).trim().length() == 0;
        } else if (obj instanceof CharSequence) {
            return ((CharSequence) obj).length() == 0;
        } else if (obj instanceof Collection) {
            return ((Collection) obj).isEmpty();
        } else if (obj instanceof Map) {
            return ((Map) obj).isEmpty();
        } else if (obj instanceof Set) {
            return ((Set) obj).isEmpty();
        } else {
            return false;
        }
    }

    /**
     * 判断是否不为空
     */
    public static boolean isNotEmpty(Object obj) {
        return !isEmpty(obj);
    }

    public static boolean isBlank(String s) {
        if (s != null && s == "") {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 判断两个String是否相等,如果是字符,比较是否相同,如果是数字,比较是否相等
     *
     * @param aStr String
     * @param bStr String
     * @return boolean
     */
    public static boolean equalsString(String aStr, String bStr) {
        boolean isSame = false;
        aStr = toString(aStr);
        bStr = toString(bStr);
        if ((isEmpty(aStr)) && isEmpty(bStr)) {
            isSame = true;
        } else if ((isEmpty(aStr)) || (isEmpty(bStr))) {
            isSame = false;
        } else if (aStr.equals(bStr)) {
            isSame = true;
        }
        return isSame;
    }

    /**
     * Convert string to string after trim
     */
    public static String toString(String sValue) {
        return isNull(sValue) ? "" : sValue.trim();
    }

    /**
     * 判断Object是否为null
     */
    public static boolean isNull(Object oValue) {
        return oValue == null ? true : false;
    }

    /**
     * 判断两个数字是否相等,可以是Long、long、Float、float、int、Integer、double、Double、Byte、byte
     *
     * @param aNum
     * @param bNum
     * @return boolean
     */
    public static boolean equalsNumber(Number aNum, Number bNum) {
        if (aNum == bNum) {
            return true;
        } else if (aNum == null || bNum == null) {
            return false;
        } else {
            return aNum.equals(bNum);
        }
    }
}
